package com.itlong.cloud.sdk.dao;

import com.itlong.cloud.POJO.PO.AppUserRoomPO;
import com.itlong.cloud.POJO.PO.ProjectPO;
import com.itlong.cloud.POJO.PO.RoomInfoPO;
import com.itlong.cloud.POJO.PO.UnitInfoPO;
import com.itlong.cloud.POJO.VO.operate.OperateOperationLogVO;
import com.itlong.cloud.POJO.VO.sdk.SDKServerProjectInfoListPageVO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      云对讲SDK项目Dao
 * </desc>
 *
 * @createDate 2018/05/21
 */
@Mapper
@Repository
public interface ICloudTalkSDKServerProjectDao {

    /**
     * <desc>
     *      根据项目ID和pubKey查询单个项目
     * <desc/>
     * @param  desProjectId  待查询项目ID
     * @param  pubKey  项目密钥
     * @return  ProjectPO  返回对象
     * @author JuGuang.S
     * @createDate 2018/05/11
     */
    ProjectPO getByProjectIdAndPubKey(@Param("desProjectId") String desProjectId, @Param("pubKey") String pubKey);

    /**
     * <desc>
     *      云对讲SDK查看该项目下是否存在指定用户
     * <desc/>
     * @param projectId     项目编号
     * @param userId     用户Id
     * @return
     * @author JuGuang.S
     * @createDate 2018/05/21
     */
    Integer userIsExist(@Param("projectId") String projectId, @Param("userId") String userId);

    /**
     * <desc>
     *      云对讲SDK修改项目下指定用户的禁用启用状态
     * <desc/>
     * @param param 项目编号、用户ID、所要改变的状态
     * @return
     * @author JuGuang.S
     * @createDate 2018/05/21
     */
    void modifyUserStatus(Map<String,Object> param);

    /**
     * <desc>
     *      根据projectId,buildNum,unitNum和roomNum查询房间信息
     * <desc/>
     * @param       params      待查询的参数集
     * @return      符合的房间对象集
     * @author JuGuang.S
     * @createDate 2018/05/21
     */
    List<RoomInfoPO> getRoomByPiBnUnRn(Map<String, Object> params);

    /**
     * <desc>
     *      根据projectId,buildNum,unitNum和roomNum查询该房间下是否已有业主
     * <desc/>
     * @param       params      待查询的参数集
     * @return      符合的房间对象集
     * @author JuGuang.S
     * @createDate 2018/12/6
     */
    Integer getIsOwnerUser(Map<String, Object> params);

    /**
     * <desc>
     *      根据项目编号查询sip的ip和port
     * <desc/>
     * @param  projectId  查询项目ID
     * @return  Map<String,String>  返回sip的ip和port
     * @author JuGuang.S
     * @createDate 2018/05/14
     */
    Map<String,Object> getSipInfoByProjectId(@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取项目信息列表分页总数量
     * </desc>
     *
     * @param params 查询参数
     * @return 总数量
     * @author Qiang.S
     * @createDate 2018/05/23
     */
    Integer getProjectListPageCount(Map<String,Object> params);

    /**
     * <desc>
     *      获取项目信息列表分页数据集
     * </desc>
     *
     * @param params 查询参数
     * @return  分页数据集
     * @author Qiang.S
     * @createDate 2018/05/23
     */
    List<SDKServerProjectInfoListPageVO> getProjectListPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取证书文件url
     * </desc>
     *
     * @return 证书文件url
     * @author wangzhi
     * @createDate 2018/11/22
     */
    String getUrlByProjectId(@Param("projectId") String projectId);

    /**
     * <desc>
     *      保存格式化的数据对象
     * </desc>
     *
     * @param map 参数集
     * @return 保存的行数
     * @author wangzhi
     * @createDate 2018/11/22
     */
    Integer save(Map<String, Object> map);

    /**
     * <desc>
     *      更新苹果证书
     * </desc>
     *
     * @return 更新的行数
     * @author wangzhi
     * @createDate 2018/11/22
     */
    Integer updateApplePush(@Param("projectId") String projectId, @Param("url") String url);

    /**
     * <desc>
     *      获取正常状态下的业主身份房间信息
     * </desc>
     * @param params 条件(map("userIds",userIds);map("projectId",projectId))
     * @return
     * @author zhangs
     * @createDate 2018/01/09
     */
    List<AppUserRoomPO> getHouseHoldRoomAtNormalStatus(Map<String,Object> params);

    /**
     * <desc>
     *      根据项目编号和角色为开发者账号查询当前项目绑定的灵云快智的应用账号信息
     * </desc>
     * @param projectId
     * @return
     * @author Juguang.S
     * @createDate 2018/12/21
     */
    String getBingLykzAppId(@Param("projectId") String projectId, @Param("roleId") String roleId, @Param("appId") String appId);

    /**
     * <desc>
     *      根据userId获取用户的sipAccount
     * </desc>
     * @param userId
     * @return
     * @author Juguang.S
     * @createDate 2019/01/02
     */
    String getSipAccountByUserId(@Param("userId") String userId);
}
